ESXI中运行RouterOS和openWRT
提醒:本文最后更新于 2322 天前,文中所描述的信息可能已发生改变,请谨慎使用。
平时搞一些前端项目时发现npm的速度非常慢,淘宝的cnpm又总是有些莫名其妙的问题,于是有了加速访问的想法。
思路来自如下链接,感谢这位博主。
https://www.willnet.net/index.php/archives/95/
用RouterOS建立一个中国大陆IP段的Address Lists,然后用Mangle建立一个非大陆IP的Routing Mark,最后添加一条路由使访问非大陆IP的流量从部署了SSR的openWRT中出去。
说干就干,部署ESXI以及RouterOS CHR就不再赘述,想必诸位能看到这里,想必这些简单的东西肯定是会的。
首先要得到中国大陆IP段列表,可以去APNIC得到,具体指令如下:
curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.rsc
curl没进度的同学可以用浏览器直接打开上面的链接,然后直接Ctrl+A全选复制后放到一个文档里,例如1.txt,然后使用如下指令筛选出中国大陆IP。
cat 1.txt | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.rsc
然后用打开VSCode之类的编辑器打开chnroute.rsc,在第一行添加/ip firewall address-list
,然后使用多行编辑功能在其他的所有行首添加add list=cn-ip address=
,VSCode是单击第二行行首,然后拉到最后一行,按住ALT+Shift单击最后一行行首,即可选中所有行行首;建议在此之前直接复制add list=cn-ip address=
,然后选中后直接粘贴即可。
最终效果如下:
在此提供截至2018/11/09的中国大陆IP段列表,可以直接在RouterOS内导入。
接下来打开WinBox的File菜单,将chnroute.rsc拖入。
打开终端,导入列表。
import file-name=chnroute.rsc
另外保留地址也需要加入此列表,这里提供一下保留IP段的Address List.
import file-name=route-list.rsc
在IP-Firewall-Address Lists中可看到导入的数据。
接下来建立一个需要加速的内网设备ip列表,我并不需要让所有设备加速,防止它们无端的消耗流量。
如果你的内网设备较少或者直接让整个内网网段加速,那么可以跳过这一步,在下面建立非大陆IP的Routing Mark时,将代码中的src-address-list=goG
改为你的内网网段,比如src-address=192.168.1.1/24
。
建立需要加速的ip列表:
/ip firewall address-list
add address=10.1.1.123 list=goG
add address=10.1.1.124 list=goG
...
然后要建立一个非大陆IP的Routing Mark,指令如下:
/ip firewall manage
add chain=prerouting src-address-list=goG dst-address-list=!cn-ip action=mark-routing new-routing-mark=goSSR passthrough=yes
接下来调openwrt这边,我是用lean大佬的源码编译的x86固件,地址在这里:https://github.com/coolsnowwolf/lede
编译出来的固件我使用的是openwrt-x86-64-combined-squashfs.img,然后使用StarWind V2V Image Converter可以转为ESXI使用的vmdk文件,注意转换出来后是两个vmdk文件,将两个文件都上传到ESXI里后它们会自动合并为一块虚拟硬盘,届时在openwrt里添加这块硬盘就可以了。
在ESXI中新建一个虚拟交换机,不要绑定物理网卡,接着以这个虚拟交换机为基础建立一个端口组,端口组VLAN ID为4095,将openwrt和ROS添加到这个端口组上。
然后主要是在这个新建的端口组上做文章,使用VLAN的方式单线复用,让openWRT和ROS可以进行通信,openWRT的WAN口VLAN ID为20,ip地址为192.168.99.2,对应的ROS IP地址为192.168.99.1;LAN口VLAN ID为10,IP地址为192.168.88.1,对应的ROS IP地址为192.168.88.2
启动openwrt,在控制台中输入vim /etc/config/network
,修改LAN口的网卡eth0为eth0.10以及ip地址,并按照下图添加wan口;
接下来给ROS添加VLAN并配上对应的ip地址,打开ROS终端:
ether3为openwrt对应的网卡,请自行替换。
/interface vlan
add vlan-id=10 interface=ether3 name=opLAN
add vlan-id=20 interface=ether3 name=opWAN
/ip address
add address=192.168.88.2/24 netmask=255.255.255.0 interface=opLAN
add address=192.168.99.1/24 netmask=255.255.255.0 interface=opWAN
现在在浏览器中打开192.168.88.1,网络-DHCP/DNS-取消仅本地服务的勾选。
然后将需要加速的设备的DNS请求转发给192.168.88.1
/ip firewall nat
add chain=dstnat protocol=udp dst-port=53 src-address-list=goG action=dst-nat to-addresses=192.168.88.1 to-ports=53
或者直接修改全局DNS为192.168.88.1,
/ip dns
set servers=192.168.88.1,119.29.29.29,114.114.114 allow-remote-requests=yes
cache flush
/ip dhcp-server network
set 0 dns-server=192.168.88.1 //如果将ROS的DNS改为了192.168.88.1,这里可以使用你的ROS路由器IP。
在这里我遇到一个问题,在ROS上重定向DNS请求后米家的设备便无法上网了,不知道是哪里的问题。所以我采用的是第一种方法,即建立一个需要加速的设备ip列表。
接下来再添加路由表,使非大陆IP的流量从openWRT走。
/ip route
add dst-address=0.0.0.0/0 gateway=192.168.88.1 routing-mark=goSSR
接下来,清空电脑DNS,打开命令行,npm i express
,没错,就是这么爽快!再也不用忍受npm的龟速!